package com.ky.server.dao;

import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.ky.common.entity.KyFile;
import com.ky.server.util.ConfigConstants;
import com.ky.server.util.PropertiesUtil;

public class FileDao {

	private static HashMap<Long , KyFile> fileMap=new HashMap<>();
	private static Document document;
	private static String xmlPath=PropertiesUtil.getProperty(ConfigConstants.SERVER_FILES_PATH_KEY);
	
	static {
		SAXReader saxReader = new SAXReader();
		try {
			document=saxReader.read(xmlPath);
			Element rootElement = document.getRootElement();
			//获取根元素下的所有子元素
			List<Element> fileElements = rootElement.elements();
			for (Element fileElement : fileElements) {
				Long id = Long.parseLong(fileElement.attributeValue("id"));
				String name = fileElement.elementTextTrim("name");
				Double size = Double.parseDouble(fileElement.elementText("size"));
				String path = fileElement.elementTextTrim("path");
				//将xml文件中的信息保存到集合中
				fileMap.put(id, new KyFile(id, name, size, path));
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	//查找并返回全部的文件
	public static KyFile[] getFileList() {
		//将map中的值转为collection集合
		Collection<KyFile> files=fileMap.values();
		//将collection集合转为数组，方便后面循环遍历输出
		return files.toArray(new KyFile[] {});
	}
	
	//通过id查询并返回文件，将文件读取为字节数组
	public static byte[] getFileById(Long id) {
		//获取文件的id
		KyFile kyFile = fileMap.get(id);
		//根据文件id获取文件路径
		String path = kyFile.getPath();
		//根据路径创建file对象
		File destFile = new File(path);
		if(!destFile.exists()) {
			return null;
		}else {
			//FileUtils 读取文件转换为字节数组
			try {
				byte[] bs = FileUtils.readFileToByteArray(destFile);
				return bs;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
}
